package com.chaoxing.controller;

import com.chaoxing.entity.Charts;
import com.chaoxing.entity.Course;
import com.chaoxing.service.CourseService;
import com.chaoxing.util.PageUtil;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class CourseController {

    @Resource
    private CourseService courseService;


    //导入一门课程，需要输入课程的全部信息
//    数据库出现中文乱码(解决方案：通过查阅资料，询问朋友，找出了问题原因，发现在设计数据库时，数据库、表字段编码格式未统一，最终通过
//    检查数据库、每一张表以及每一个字段，对其进行修改统一，解决问题。
//    问题原因：数据库、表字段编码格式统一)
    //java.sql.SQLException: Invalid value for getInt()
    //检查sql字段属性跟entity是否一致，查看对应的数据库字段类型！！！！！
    //Invalid value for getInt()是一个java.sql.SQLException异常，查询SQL会看到查询的字段是vachar型
//    但是我们使用mybatis时，写的返回值接收是int型，所以转换出错了，所以要保证SQL查询结果和返回时接收的类型是一致的才可以。
    @RequestMapping("/insertSelectiveCourse.do")
    public Map<String, Course> insertSelectiveCourse(Course record) {
        Map<String, Course> map = new HashMap<>();
        int i = courseService.selectCourseNo(record.getCourseno());
        if (i == 0){
            int num = courseService.insertSelective(record);
            if (num == 1) {
                //成功
                map.put("导入" + record.getCoursename() + "课程成功", record);
                return map;
            }else{
                //失败
                map.put("导入失败，请检查您输入的信息是否有误!", record);
                return map;
            }
        }
        map.put("导入失败，该课程已经存在",record);
        return map;
    }

    //通过id删除课程（做不到）
    @RequestMapping("/deleteByPrimaryKey")
    public boolean deleteByPrimaryKey(Integer id) {
        int i = courseService.deleteByPrimaryKey(id);
        boolean flag = false;
        if (i > 0) {
            flag = true;
            return flag;
        }
        return flag;
    }

    //批量删除(做不到)
    @RequestMapping("/deleteCoursesByPrimaryKey")
    public Map<String, Integer> deleteCoursesByPrimaryKey(HttpServletRequest request) {
        String[] ids = request.getParameterValues("id");
        List<Integer> list = new ArrayList<>();
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < ids.length; i++) {
            list.add(Integer.valueOf(ids[i]));
        }
        int i = courseService.deleteCoursesByPrimaryKey(list);
        if (i > 0) {
            map.put("删除成功", i);
            return map;
        } else
            map.put("删除失败", 0);
        return map;
    }



    //通过课程编号查询课程
    @RequestMapping("/searchCourseNo")
    public Map<String, List<Course>> searchCourseNo(String courseno) {
        List<Course> list = new ArrayList<>();
        Map<String, List<Course>> map = new HashMap<>();
        Course course = courseService.searchCourseNo(courseno);
        list.add(course);
        if (course != null) {
            map.put("item", list);
            return map;
        }
        map.put("item", list);
        return map;
    }


    //通过课程名称查询课程    （一直取到的空值
    // 原因：数据库乱码问题，导致where子句不成立，查询数据为空，
    // 解决方案：导致这个问题原因的根本是数据库乱码问题，导致where子句不成立，查询数据为空。
    // 当解决了数据库中文乱码问题之后，这个问题也就解决了）
    @RequestMapping("/searchCourseName")
    public Map<String, Course> searchCourseName(String coursename) {
        Map<String, Course> map = new HashMap<>();
        Course course = courseService.searchCourseName(coursename);
//        System.out.println(coursename);
//        System.out.println(course);
        if (course != null) {
            map.put("查询成功", course);
            return map;
        }
        map.put("查询失败，没有【" + coursename + "】课程", course);
        return map;
    }

    //查询属于某个学院的课程
    @RequestMapping("/searchCollegeCourses")
    public Map<String, List<Course>> searchCollegeCourses(String faculty,int pageNo) {
        Map<String, List<Course>> map = new HashMap<>();
        int index = PageUtil.pageNoToIndex(pageNo);
        List<Course> coursesList = courseService.searchCollegeCourses(faculty,index,PageUtil.PAGE_SIZE);
        if (coursesList != null) {
            map.put("result", coursesList);
            return map;
        }else {
            map.put(faculty + "不存在:", coursesList);
            return map;
        }
    }

    //通过学院和课程名称查询课程         (找不到学院的字段，显示sql异常
    // 经过反复的调试，查找问题，发现并不是sql语句写错，而是别的问题。1、没有明确指定参数，导致Mybatis不能成功匹配参数
    // 解决方法：在mapper/dao中使用多个参数时必须用@Param(“XXX”)来指明。所以，我们需要对mapper/dao中的多参数方法进行修改。
    // 当只有一个参数时，dao接口的方法中可不用添加注解。Mybatis可成功匹配参数。当大于一个参数时，dao接口的方法中需要使用注解@Param(“XXX”)为Mybatis指定参数名称。
    // 2、在进行代码设计时，对数据的返回值设计不合理，导致两个方法转换冲突，从而引发运行时异常。
    // )
    @RequestMapping("/searchCollegeCurriculumCourses")
    public Map<String, List<Course>> searchCollegeCurriculumCourses ( String faculty, String coursename) {
        Map<String, List<Course>> map = new HashMap<>();
        List<Course> course = courseService.searchCollegeCurriculumCourses(faculty, coursename);
        if (course != null) {
            map.put("查询成功", course);
            return map;
        }
        map.put("查询失败，请检查您的输入是否有误。", course);
        return map;
    }

    //通过学院和课程编号查询课程
    @RequestMapping("/searchCollegeNoCourse")
    public Map<String, List<Course>> searchCollegeNoCourse (String faculty, String courseno) {
        Map<String, List<Course>> map = new HashMap<>();
        List<Course> course = courseService.searchCollegeNoCourse(faculty, courseno);
        if (course != null) {
            map.put("查询成功", course);
            return map;
        }
        map.put("查询失败,请检查您输入的课程编号或学院是否有误!", course);
        return map;
    }


    //分页查询
    //查询所有课程。1页10条

    /**
     * 分页查询  一页十条数据 查询所有的课程
     *
     * @return
     */
    @RequestMapping("/queryCoursePage.do")
    public Map<String, PageInfo<Course>> queryCoursePage() {
        Map<String, PageInfo<Course>> map = new HashMap<>();
        PageInfo<Course> coursePageInfo = courseService.queryCoursePage(1, 10);
        map.put("items", coursePageInfo);
        return map;
    }

    //新增课程分页
    @RequestMapping("/selectAllCourse")
    public Map<String, List<Course>> selectAllCourse(Integer pageNo) {
        Map<String, List<Course>> map = new HashMap<>();
        int index = PageUtil.pageNoToIndex(pageNo);
        List<Course> courses = courseService.selectAllCourse(index, PageUtil.PAGE_SIZE);
        if (courses.size() != 0){
            map.put("items",courses);
            return map;
        }else {
            map.put("items",courses);
        }
        return map;
    }

    /**
     * 查询所有的ID
     * @return
     */
    @RequestMapping("/selectAllId.do")
    public Map<String,List<Charts>> queryAllCourseId(){
        Map<String,List<Charts>> map = new HashMap<>();
        List<Charts> list = courseService.queryAllIDByCourse();
        if(list.size() > 0){
            map.put("ids",list);
            return map;
        }
        map.put("isNull",null);
        return map;
    }
}
